<?php
	include_once('Querys.php');
	include_once('UsuarioService.php');
	include_once('vo/Tarea.php');
	
	class TareaService extends Querys{
		
		var $tabla = "tareas";
		
		public function getById($id){
			$result = $this->consulta("SELECT tareas.*, usuarios.nombre, estados.nombre AS estado FROM ".$this->tabla." JOIN historias ON tareas.id_historia = historias.id LEFT JOIN usuarios ON usuarios.id = tareas.id_usuario JOIN estados ON estados.id = tareas.id_estado WHERE tareas.id = $id");
			$fila = $this->fetch($result);
		
			$tarea = $this->armarTarea($fila);
			
			return $tarea;
		}
		
		public function getByProyecto($id, $id_usuario){
		
			$result = $this->consulta("SELECT tareas.*, usuarios.nombre, estados.nombre AS estado FROM ".$this->tabla." JOIN historias ON tareas.id_historia = historias.id LEFT JOIN usuarios ON usuarios.id = tareas.id_usuario JOIN estados ON estados.id = tareas.id_estado WHERE historias.id_proyecto = $id && tareas.id_usuario = $id_usuario");
			
			$tareas = array();
			
			while($fila = $this->fetch($result)){
			
				$tarea = $this->armarTarea($fila);
				
				$tareas[] = $tarea;
			}
			
			return $tareas;
		}
		
		/*--------------------------------------------------------------------------
		Devuelve las tareas que esten dentro de la historia que se le pasa como argumento
		--------------------------------------------------------------------------*/
		
		public function getByHistoria($id){
		
			$result = $this->consulta("SELECT tareas.*, usuarios.nombre, estados.nombre AS estado FROM ".$this->tabla." JOIN historias ON tareas.id_historia = historias.id LEFT JOIN usuarios ON usuarios.id = tareas.id_usuario JOIN estados ON estados.id = tareas.id_estado WHERE historias.id = $id");
			
			$tareas = array();
			
			while($fila = $this->fetch($result)){
			
				$tarea = $this->armarTarea($fila);
				
				$tareas[] = $tarea;
			}
			
			return $tareas;
		}		
		
		public function getByUser($id_usuario){
		
			$result = $this->consulta("SELECT tareas.*, estados.nombre AS estado, proyectos.id AS id_proyecto, proyectos.nombre AS proyecto FROM tareas JOIN estados ON tareas.id_estado = estados.id JOIN historias ON tareas.id_historia = historias.id JOIN proyectos ON historias.id_proyecto = proyectos.id WHERE id_usuario = $id_usuario");
			$misTareas = array();
			
			while($fila = $this->fetch($result)){
				
				$tarea = $this->armarTarea($fila);
				
				$misTareas[] = $tarea;
			}
			
			return $misTareas;
		}
		
		public function getAsignada($id_tarea){
		
			$result = $this->consulta("SELECT id_usuario FROM tareas WHERE id = $id_tarea");
			$fila = $this->fetch($result);
			
			return $fila["id_usuario"];
		}
		
		public function getPendientes($id){
		
			$result = $this->consulta("SELECT COUNT(*) AS pendientes FROM tareas WHERE id_usuario = $id");
			$fila = $this->fetch($result);
			
			return $fila["pendientes"];
		}
		
		public function save(Tarea $tarea){
			if($this->consulta("INSERT INTO ".$this->tabla." VALUES (null, '".$tarea->titulo."', '".$tarea->descripcion."', '".$tarea->deadline."', ".$tarea->id_estado.", ".$tarea->id_usuario.", ".$tarea->id_historia.")")){
				if($tarea->id_usuario != "null"){
					$service = new UsuarioService();
					$usuario = $service->getUsuario($tarea->id_usuario);
					$this->enviarMail($usuario->email);
				}
				return $this->getById(mysql_insert_id());
			}
		}
		
		public function update(Tarea $tarea){	
			$id_ant = $this->getAsignada($tarea->id);
			if($this->consulta("UPDATE ".$this->tabla." SET titulo = '".$tarea->titulo."', descripcion = '".$tarea->descripcion."', deadline = '".$tarea->deadline."', id_usuario = ".$tarea->id_usuario.", id_estado = ".$tarea->id_estado." WHERE id = ".$tarea->id)){
				if($tarea->id_usuario != $id_ant){
					$service = new UsuarioService();
					$usuario = $service->getUsuario($tarea->id_usuario);
					$this->enviarMail($usuario->email);
				}
				return $this->getById($tarea->id);
			}
			return false;
		}
		
		public function finalizar($id){
			if($this->consulta("UPDATE ".$this->tabla." SET id_estado = 3 WHERE id = ".$id)){
				return true;
			}
			return false;
		}
		
		private function armarTarea($fila){
			$tarea = new Tarea();
			$tarea->id = $fila["id"];
			$tarea->titulo = $fila["titulo"];
			$tarea->descripcion = $fila["descripcion"];
			$tarea->deadline = $fila["deadline"];
			$tarea->usuario = $fila["nombre"];
			$tarea->estado = $fila["estado"];
			$tarea->id_estado = $fila["id_estado"];
			$tarea->id_usuario = $fila["id_usuario"];
			$tarea->id_historia = $fila["id_historia"];
			$tarea->id_proyecto = $fila["id_proyecto"];
			$tarea->proyecto = $fila["proyecto"];
			
			return $tarea;
		}
		
		private function enviarMail($email){
		
			$header = "From: Scrumorg <".Conexion::EMAIL.">\r\n";
			$header .= "X-Mailer: PHP/" . phpversion() . "\r\n";
			$header .= "MIME-Version: 1.0\r\n";
			$header .= "Content-type: text/html; charset=iso-8859-1\r\n";
			$header .= "Content-Transfer-Encoding: 7bit\r\n";
			$para = $email;
			
			$asunto = 'Te han asignado una tarea - ScrumOrg';
			
			$titulo = "Te han asignado una tarea.";
			$texto = "Acaban de asignarte una tarea en Scrumorg, para mas detalles debes ingresar a la secci&oacute;n Backlog.";
			$link = Conexion::HTTP . Conexion::URL_BASE."/home";
			
			include("../controller/email.php");
			
			if(mail($para, $asunto, $mensaje, $header)){
				return true;
			}
		}
		
	}
?>